Computer graphics systems are used in many game and simulation applications. For example, flight simulators use graphics systems to present scenes that a pilot would be expected to see if he or she were flying in an actual aircraft cockpit. Several key techniques used to achieve visual realism include antialiasing, blending, polygon offset, lighting, texturizing, and atmospheric effects. Atmospheric effects such as fog, smoke, smog, and other gaseous phenomena are particularly useful because they create the effect of objects appearing and fading at a distance. This effect is what one would expect as a result of movement. Gaseous phenomena are especially important in flight simulation applications because they help to train pilots to operate in and respond to conditions of limited visibility.
Quite a few methods for creating realistic images of fog, clouds and other gaseous phenomena have been developed in the past. Most of these techniques focus on computing the light distribution through the gas and present various methods of simulating the light scattering from the particles of the gas. Some resolve multiple scattering of light in the gas and others consider only first order scattering (the scattering of light in the view direction) and approximate the higher order scattering by an ambient light. A majority of the techniques use ray-tracing, voxel-traversal, or other time-consuming algorithms to render the images. Taking advantage of the current graphics hardware some of the techniques are approaching interactive frame rates.
Another approach renders clouds and light shafts by blending a set of billboards, representing metaballs. The rendering times range from 10 to 30 seconds for relatively small images. Another approach renders gases by blending slices of the volume in the view direction. Using 3D textures, a near real-time frame rate is achieved. This is especially true for smaller images. Unfortunately, both these techniques are fill-limited, i.e., the number and the size of the rendered semi-transparent polygons is limited by the number of pixels hardware can render per second. Even on the fastest machines, it is not possible to render too many full-screen polygons per frame. The techniques may be suitable for rendering smaller local objects, e.g., a smoke column or a cloud, but even then the performance can suffer when the viewer comes too close to the object and the semitransparent polygons fill the whole screen. In the case of a patchy fog that can be spread across a large part of the scene, the number of slices would be simply too large.
In real-time animations, smoke and clouds are usually simulated by mapping transparent textures on a polygonal object that approximates the boundary of the gas. Although the texture may simulate different densities of the gas inside the 3D boundary and compute even the light scattering inside the gas, it does not change, when viewed from different directions, and it does not allow movement through the gas without sharp transitions. Consequently, these techniques are suitable for rendering very dense gases or gases viewed from a distance. Other methods simplify their task by assuming constant density of the gas at a given elevation, thereby making it possible to use 3D textures to render the gas in real time. The assumption, however, prevents using the algorithm to render patchy fog. What is needed is a way to render in real-time, complex scenes that include patchy fog and other gaseous phenomena such that efficiency and high quality visual realism are achieved.